]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
extensionUtils: Remove ShellJS library
authorPhilip Chimento <philip.chimento@gmail.com>
Wed, 5 Oct 2016 05:27:18 +0000 (22:27 -0700)
committerPhilip Chimento <philip@endlessm.com>
Mon, 17 Oct 2016 19:36:16 +0000 (12:36 -0700)
You can define a new importer object by importing a subdirectory in GJS.
This is undocumented, but it is likely to at least hold until the whole
thing moves to ES6 modules, after which we'll be able to do this purely
in JS with Reflect.Loader.

Since this was the only thing the ShellJS library did, we can remove it
altogether.

This allows us to discontinue use of the gjs-internals-1.0 embedder API.

https://bugzilla.gnome.org/show_bug.cgi?id=772386

js/misc/extensionUtils.js
src/Makefile.am
src/gnome-shell-extension-prefs.c
src/main.c
src/shell-js.cpp [deleted file]
src/shell-js.h [deleted file]

index aff91acc719a64e76de2102012f1b6aaa600ae26..65d02c29a38133ebd182fea733d9f19df2d77d9d 100644 (file)
@@ -6,9 +6,7 @@
 const Lang = imports.lang;
 const Signals = imports.signals;
 
-const GLib = imports.gi.GLib;
 const Gio = imports.gi.Gio;
-const ShellJS = imports.gi.ShellJS;
 
 const Config = imports.misc.config;
 const FileUtils = imports.misc.fileUtils;
@@ -151,12 +149,13 @@ function createExtensionObject(uuid, dir, type) {
     return extension;
 }
 
-var _extension = null;
-
 function installImporter(extension) {
-    _extension = extension;
-    ShellJS.add_extension_importer('imports.misc.extensionUtils._extension', 'imports', extension.path);
-    _extension = null;
+    let oldSearchPath = imports.searchPath.slice();  // make a copy
+    imports.searchPath = [extension.path];
+    // importing a "subdir" creates a new importer object that doesn't affect
+    // the global one
+    extension.imports = imports['.'];
+    imports.searchPath = oldSearchPath;
 }
 
 const ExtensionFinder = new Lang.Class({
index e9aacfe0c42251b5963c09daa7121f2c98df3d42..506bf912c844f02161809412f5f6f8022f76224d 100644 (file)
@@ -78,7 +78,7 @@ gnome_shell_cflags =                          \
        -DGNOME_SHELL_PKGLIBDIR=\"$(pkglibdir)\"
 
 privlibdir = $(pkglibdir)
-privlib_LTLIBRARIES = libgnome-shell-js.la libgnome-shell-menu.la libgnome-shell.la
+privlib_LTLIBRARIES = libgnome-shell-menu.la libgnome-shell.la
 noinst_LTLIBRARIES += libgnome-shell-base.la
 
 shell_built_sources = \
@@ -200,7 +200,7 @@ gnome_shell_CPPFLAGS = \
 
 # Here, and after, we repeat mutter and bluetooth libraries just for the rpath
 # The dependency is already pulled in by libtool
-gnome_shell_LDADD = libgnome-shell.la libgnome-shell-js.la $(GNOME_SHELL_LIBS) $(MUTTER_LIBS)
+gnome_shell_LDADD = libgnome-shell.la $(GNOME_SHELL_LIBS) $(MUTTER_LIBS)
 gnome_shell_LDFLAGS = -rpath $(MUTTER_TYPELIB_DIR)
 gnome_shell_DEPENDENCIES = libgnome-shell.la
 
@@ -212,7 +212,7 @@ nodist_gnome_shell_extension_prefs_SOURCES = \
        $(top_builddir)/js/js-resources.h               \
        $(NULL)
 gnome_shell_extension_prefs_CPPFLAGS = $(gnome_shell_cflags)
-gnome_shell_extension_prefs_LDADD = libgnome-shell-js.la $(GNOME_SHELL_LIBS)
+gnome_shell_extension_prefs_LDADD = $(GNOME_SHELL_LIBS)
 gnome_shell_extension_prefs_LDFLAGS = -rpath $(MUTTER_TYPELIB_DIR)
 
 if HAVE_NETWORKMANAGER
@@ -226,30 +226,13 @@ nodist_gnome_shell_portal_helper_SOURCES = \
        $(top_builddir)/js/js-resources.h               \
        $(NULL)
 gnome_shell_portal_helper_CPPFLAGS = $(gnome_shell_cflags)
-gnome_shell_portal_helper_LDADD = libgnome-shell-js.la $(GNOME_SHELL_LIBS)
+gnome_shell_portal_helper_LDADD = $(GNOME_SHELL_LIBS)
 gnome_shell_portal_helper_LDFLAGS = -rpath $(MUTTER_TYPELIB_DIR)
 
 endif
 
 ########################################
 
-libgnome_shell_js_la_SOURCES =         \
-       shell-js.h                      \
-       shell-js.cpp                    \
-       $(NULL)
-
-libgnome_shell_js_la_LIBADD =          \
-       $(GNOME_SHELL_JS_LIBS)          \
-       $(NULL)
-
-libgnome_shell_js_la_LDFLAGS =         \
-       -avoid-version
-
-libgnome_shell_js_la_CPPFLAGS =                \
-       $(GNOME_SHELL_JS_CFLAGS)
-
-########################################
-
 shell_recorder_sources =        \
        shell-recorder.c        \
        shell-recorder.h
@@ -366,13 +349,6 @@ Shell_0_1_gir_SCANNERFLAGS =       \
 INTROSPECTION_GIRS += Shell-0.1.gir
 CLEANFILES += Shell-0.1.gir
 
-ShellJS-0.1.gir: libgnome-shell-js.la
-ShellJS_0_1_gir_CFLAGS = $(libgnome_shell_la_CPPFLAGS) -I $(srcdir)
-ShellJS_0_1_gir_LIBS = libgnome-shell-js.la
-ShellJS_0_1_gir_FILES = $(libgnome_shell_js_la_SOURCES)
-INTROSPECTION_GIRS += ShellJS-0.1.gir
-CLEANFILES += ShellJS-0.1.gir
-
 St-1.0.gir: libst-1.0.la
 St_1_0_gir_INCLUDES = Clutter-1.0 Gtk-3.0
 St_1_0_gir_CFLAGS = $(st_cflags) -DST_COMPILATION
index 973f3c120724b95857bb0d688f4f0630bde58be6..967e6156f6cb72b38041185a525191d7a03a0641 100644 (file)
@@ -6,8 +6,6 @@
 #include <gjs/gjs.h>
 #include <glib/gi18n.h>
 
-#include "shell-js.h"
-
 int
 main (int argc, char *argv[])
 {
@@ -51,18 +49,3 @@ main (int argc, char *argv[])
 
   return 0;
 }
-
-
-/* HACK:
-   Add a dummy function that calls into libgnome-shell-js.so to ensure it's
-   linked to /usr/bin/gnome-shell-extension-prefs even when linking with
-   --as-needed. This function is never actually called.
-   https://bugzilla.gnome.org/show_bug.cgi?id=670477
-*/
-void _shell_link_to_shell_js (void);
-
-void
-_shell_link_to_shell_js (void)
-{
-  shell_js_add_extension_importer (NULL, NULL, NULL, NULL);
-}
index e8ac998cb1a800508628fae63cbe94a311bf35ec..25d2778d05261307db6b303590a9f10ce17f5507 100644 (file)
@@ -25,7 +25,6 @@
 
 #include "shell-global.h"
 #include "shell-global-private.h"
-#include "shell-js.h"
 #include "shell-perf-log.h"
 #include "st.h"
 
@@ -480,17 +479,3 @@ main (int argc, char **argv)
 
   return ecode;
 }
-
-/* HACK:
-   Add a dummy function that calls into libgnome-shell-js.so to ensure it's
-   linked to /usr/bin/gnome-shell even when linking with --as-needed.
-   This function is never actually called.
-   https://bugzilla.gnome.org/show_bug.cgi?id=670477
-*/
-void _shell_link_to_shell_js (void);
-
-void
-_shell_link_to_shell_js (void)
-{
-  shell_js_add_extension_importer (NULL, NULL, NULL, NULL);
-}
diff --git a/src/shell-js.cpp b/src/shell-js.cpp
deleted file mode 100644 (file)
index 67345cb..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
-
-#include "config.h"
-
-#include "shell-js.h"
-
-#include <gio/gio.h>
-#include <gjs/gjs.h>
-#include <gjs/gjs-module.h>
-
-/**
- * shell_js_add_extension_importer:
- * @target_object_script: JavaScript code evaluating to a target object
- * @target_property: Name of property to use for importer
- * @directory: Source directory:
- * @error: A #GError
- *
- * This function sets a property named @target_property on the object
- * resulting from the evaluation of @target_object_script code, which
- * acts as a GJS importer for directory @directory.
- *
- * Returns: %TRUE on success
- */
-gboolean
-shell_js_add_extension_importer (const char  *target_object_script,
-                                 const char  *target_property,
-                                 const char  *directory,
-                                 GError     **error)
-{
-  JS::Value target_object;
-  GList *contexts;
-  JSContext *context;
-  char *search_path[2] = { 0, 0 };
-  gboolean ret = FALSE;
-
-  /* Take the first GjsContext from all of them --
-   * we should only ever have one context, so this
-   * should be alright. */
-  contexts = gjs_context_get_all ();
-  context = (JSContext*) gjs_context_get_native_context ((GjsContext*)contexts->data);
-  g_list_free_full (contexts, g_object_unref);
-
-  JS_BeginRequest (context);
-
-  /* This is a bit of a hack; ideally we'd be able to pass our target
-   * object directly into this function, but introspection doesn't
-   * support that at the moment.  Instead evaluate a string to get it. */
-  if (!JS_EvaluateScript(context,
-                         gjs_get_global_object (context),
-                         target_object_script,
-                         strlen (target_object_script),
-                         "<target_object_script>",
-                         0,
-                         &target_object))
-    {
-      gjs_log_exception(context);
-      g_set_error(error,
-                  G_IO_ERROR,
-                  G_IO_ERROR_FAILED,
-                  "Unable to import %s", target_object_script);
-      goto out;
-    }
-
-  if (!target_object.isObject ())
-    {
-      g_error ("shell_js_add_extension_importer: invalid target object");
-      goto out;
-    }
-
-  search_path[0] = (char*)directory;
-  gjs_define_importer (context, &target_object.toObject (), target_property,
-                       (const char **)search_path, FALSE);
-  ret = TRUE;
-
- out:
-  JS_EndRequest (context);
-  return ret;
-}
diff --git a/src/shell-js.h b/src/shell-js.h
deleted file mode 100644 (file)
index c00d313..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
-#ifndef __SHELL_JS_H__
-#define __SHELL_JS_H__
-
-#include <glib.h>
-
-G_BEGIN_DECLS
-
-gboolean shell_js_add_extension_importer (const char   *target_object_script,
-                                          const char   *target_property,
-                                          const char   *directory,
-                                          GError      **error);
-
-G_END_DECLS
-
-#endif /* __SHELL_JS_H__ */